#ifndef METARACE_H
#define METARACE_H 1

#include "Race.h"

#include "Parser.h"

using namespace std;

/**
 * Cette classe permet d'initialiser simplement une Race à partir du
 * nom de celle-ci. On charge toutes les informations utiles depuis le
 * fichier Joueur0/Donnees/ListeRace.xml.
 *
 * MetaRace permet également de construire directement une instance de
 * Race, mais pour avoir le bon type il est nécessaire d'utiliser la
 * méthode creerObjet(). De plus, cela permet de conserver la
 * cohérence avec la classe MetaClasse.
 *
 * @author Johan "Solo" Luisier
 */
class MetaRace : public Race
{
 public:
  MetaRace(const string& nomRace);
  ~MetaRace();

  StatusCode lireFichier();

  Race* creerObjet();

 protected:
  /**
   * Emplacement du fichier contentant les informations sur les races.
   */
  static const string fichierSource;

  /**
   * Parseur qui lit le fichier XML pour construire les attibuts de la
   * race.
   */
  Parser Lecture;

  StatusCode lirePrerequis(const ElementDOM* elDom);

  StatusCode lireCapa(const ElementDOM* elDom);

  StatusCode lireEnsemble(const ElementDOM* elDom);

  StatusCode lireModificateur(const ElementDOM* elDom);
};

#endif // METARACE_H
